有好久没有写过博客了,已经记不清上次发博客是什么时候了。去年到现在经历很多事,尝试了好多新事物,变化也挺多的。一次偶然机会了解到lua这门新语言,自己简单实现文件上传功能。
上传代码
思路: 根据上传URL来命名文件,使用OpenResty resty.upload模块获取上传文件,调用lua原生类库io.open(filename,'w+')
刷入硬盘。具体实现代码
1 | local cjson = require "cjson" |
Nginx配置
1 | location /lua { |
总结
刚开始做这个的时候,以为lua真的很强大,可以代替Java,PHP做web开发语言。结果我深入了解一下,很快就打了自己的脸了。resty.upload
只能获取form-data第一个input,无论是文件还是text类型,只会返回这个。如果你想获取到文件和表单中其他参数,那你就要使用ngx.socket.tcp 获取原生TCP,自己手动解析HTTP文本协议,获取文件数据和表达参数。我之前真的看过一位老哥手动去解析TCP文本,获取文件参数,真的强啊!。 原生类库不支持创建文件夹,创建文件要调用系统命令,这样要进程上下文切换,性能消耗特别大,或者就是使用lfs
类库,功能很简单。